package com.jun.common.redis.aspect.anno;

import org.springframework.core.annotation.AliasFor;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * @author yuejun.li
 * @date 2024/7/21 13:44
 * 分布式锁注解
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RedisLock {

    /**
     * 锁的key
     */
    String value();

    /**
     * 锁等待时间
     */
    int waitTime() default 5;

    /**
     * 锁释放时间
     */
    int leaseTime() default 10;

    /**
     * waitTime 和 leaseTime的时间单位
     */
    TimeUnit unit() default TimeUnit.SECONDS;

    @Target({ElementType.PARAMETER, ElementType.FIELD})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface KeyParamBean {
    }

    @Target({ElementType.PARAMETER, ElementType.FIELD})
    @Retention(RetentionPolicy.RUNTIME)
    @interface KeyParam {
        /**
         * 参数拼接优先级
         */
        @AliasFor("value")
        int order() default -1;

        /**
         * 用来做注解省略操作而已，没任何逻辑
         */
        @AliasFor("order")
        int value() default -1;
    }
}
